package com.mvc.controller;

import hbm.Cliente;
import hbm.ClienteDAO;

import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.hibernate.Session;
import org.hibernate.Transaction;

public class ClienteController extends HttpServlet {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	/**
	 * The doGet method of the servlet. <br>
	 * 
	 * This method is called when a form has its tag value method equals to get.
	 * 
	 * @param request
	 *            the request send by the client to the server
	 * @param response
	 *            the response send by the server to the client
	 * @throws ServletException
	 *             if an error occurred
	 * @throws IOException
	 *             if an error occurred
	 */
	@Override
	@SuppressWarnings("unchecked")
	public void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		String opcion = request.getParameter("opcion");

		if (opcion != null && opcion.equals("elimina")) {
			String boton = request.getParameter("boton");
			if (boton == null) {
				List<Cliente> listaClientees = new ClienteDAO().findAll();
				request.getSession().setAttribute("listadoClientees",
						listaClientees);
				response.sendRedirect("./jsp/eliminarCliente.jsp");
			} else {
				String idCliente = request.getParameter("idCliente");
				Cliente cliente = new Cliente();
				cliente.setId(Integer.parseInt(idCliente));
				Session session = new ClienteDAO().getSession();
				Transaction tx = session.beginTransaction();
				Object findAAgain = session.merge(cliente);
				session.delete(findAAgain);
				tx.commit();
				session.close();
				response.sendRedirect("./jsp/mantenimientoCliente.jsp");
			}
		}

		if (opcion != null && opcion.equals("cliente")) {
			String boton = request.getParameter("boton");
			if (boton != null && boton.equals("Guardar")) {

				String nombreCliente = request.getParameter("txtnombre");
				String nitCliente = request.getParameter("txtnit");

				Cliente cliente = new Cliente();

				cliente.setNombre(nombreCliente);
				cliente.setNit(nitCliente);

				Session session = new ClienteDAO().getSession();

				Transaction tx = session.beginTransaction();
				session.saveOrUpdate(cliente);
				tx.commit();
				session.close();
				response.sendRedirect("./jsp/mantenimientoCliente.jsp");
			}
		}

		if (opcion != null && opcion.equals("consulta")) {
			Session session = new ClienteDAO().getSession();
			List<Cliente> listaClientes = new ClienteDAO().findAll();
			request.getSession().setAttribute("listaCliente", listaClientes);
			session.close();
			response.sendRedirect("./jsp/mantenimientoCliente.jsp");
		}

		if (opcion != null && opcion.equals("edita")) {
			String boton = request.getParameter("boton");
			if (boton == null) {
				List<Cliente> listaClientes = new ClienteDAO().findAll();
				request.getSession().setAttribute("listadoClientes",
						listaClientes);
				response.sendRedirect("./jsp/seleccionCliente.jsp");
			}
		}

		if (opcion != null && opcion.equals("filtrar")) {
			Integer idCliente = Integer.parseInt(request
					.getParameter("idCliente"));
			Cliente clienteSeleccionada = new ClienteDAO().findById(idCliente);
			request.getSession().setAttribute("idClienteSeleccionado",
					clienteSeleccionada.getId());
			request.getSession().setAttribute("nombreClienteSeleccionada",
					clienteSeleccionada.getNombre());
			request.getSession().setAttribute("nitClienteSeleccionada",
					clienteSeleccionada.getNit());

			response.sendRedirect("./jsp/editarCliente.jsp");
		}

		if (opcion != null && opcion.equals("editando")) {
			String boton = request.getParameter("boton");
			if (boton != null && boton.equals("Editar")) {
				Integer idCliente = Integer.parseInt(request
						.getParameter("idCliente"));
				String nombreCliente = request.getParameter("txtnombre");
				String nitCliente = request.getParameter("txtnit");
				Cliente clienteSeleccionada = new ClienteDAO()
						.findById(idCliente);
				clienteSeleccionada.setNombre(nombreCliente);
				clienteSeleccionada.setNit(nitCliente);
				Session session = new ClienteDAO().getSession();

				Transaction tx = session.beginTransaction();
				session.saveOrUpdate(clienteSeleccionada);
				tx.commit();
				session.close();
				response.sendRedirect("./jsp/mantenimientoCliente.jsp");
			}
		}
	}

}
